package com.ekko.weatherapp.Model;

import android.util.Log;

import com.ekko.weatherapp.tools.Constants;
import com.ekko.weatherapp.tools.TextPinyinUtil;

import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

/**
 * Created by Ekko on 2017-12-14.
 */

public class WeatherModel {
    // 持有私有静态实例，防止被引用，此处赋值为null，目的是实现延迟加载
    private static WeatherModel instance = null;
    // 获取汉字转拼音类单例
    private TextPinyinUtil pinyin;
    // 城市拼音
    private String cityPinyin;
    // 所有信息数组
    private ArrayList infoList = new ArrayList();

    // 私有构造方法，防止被实例化
    private WeatherModel() {
        init();
    }

    // 创建实例
    public static WeatherModel getInstance() {
        // 如果instance为空，则创建实例并返回，否则直接返回实例
        if (instance == null) {
            instance = new WeatherModel();
        }
        return instance;
    }

    // 初始化所需要的东西
    private void init(){
        pinyin = TextPinyinUtil.getInstance();
    }

    /**
     * 获取城市拼音
     * @param idx 选择了第几个城市
     * @return 城市拼音
     */
    private String getCitiesPinyin(int idx) {
        // 获取所有城市名称
        String[] citiesName = Constants.cityList;
        // 根据选择的下标找到数组对应值
        String city = citiesName[idx].toString();
        // 判断city变量是否为汉字
        if (pinyin.isChineseString(city)){
            cityPinyin = pinyin.getPinyin(city);
        }
        return cityPinyin;
    }

    /**
     * 存入城市对应天气信息
     * @param infoValue 天气信息
     */
    public void setWeatherInfo(HashMap<String, String> infoValue){
        infoList.add(infoValue);
    }

    /**
     * 获取部分天气信息
     * @param infoName 需要获取的信息
     * @return 信息
     */
    public ArrayList getWeatherInfo(String infoName){
        // 数组用于储存信息
        ArrayList list = new ArrayList();
        // 遍历天气数组
        for (int i = 0; i < infoList.size(); i ++) {
            // 提取信息
            HashMap<String, String> map = (HashMap)infoList.get(i);
            // 判断是否包含key
            if (map.containsKey(infoName)) {
                // 加入数组
                list.add(map.get(infoName));
            } else
                // 不存在返回空值
                return null;
        }
        // 返回
        return list;
    }

    /**
     * 获取全部天气信息
     * @return 信息
     */
    public ArrayList getWeatherInfo() {
        // 数组用于储存信息
        ArrayList list = new ArrayList();
        // 遍历天气数组
        for (int i = 0; i < infoList.size(); i ++) {
            // 提取信息
            HashMap<String, String> map = (HashMap) infoList.get(i);
            // 加入数组
            list.add(map);
        }
        // 返回
        return list;
    }


//    /**
//     *获取白天描述信息
//     * @return 如果有信息则返回信息 没有返回空值
//     */
//    public String getWeatherDayCons(){
//        // 判断hashmap里是否有这个时间的信息
//        if (weatherInfo.containsKey(Constants.weatherType.dayCons)){
//            // 如果有 获取对应的信息
//            return weatherInfo.get(Constants.weatherType.dayCons).toString();
//        }
//        return null;
//    }
//
//    /**
//     *获取夜晚描述信息
//     * @return 如果有信息则返回信息 没有返回空值
//     */
//    public String getWeatherNightCons(){
//        // 判断hashmap里是否有这个时间的信息
//        if (weatherInfo.containsKey(Constants.weatherType.nightCons)){
//            // 如果有 获取对应的信息
//            return weatherInfo.get(Constants.weatherType.nightCons).toString();
//        }
//        return null;
//    }
//
//    /**
//     *获取最高温度信息
//     * @return 如果有信息则返回信息 没有返回空值
//     */
//    public String getWeatherMaxTmp(){
//        // 判断hashmap里是否有这个时间的信息
//        if (weatherInfo.containsKey(Constants.weatherType.maxTmp)){
//            // 如果有 获取对应的信息
//            return weatherInfo.get(Constants.weatherType.maxTmp).toString();
//        }
//        return null;
//    }
//
//    /**
//     *获取最低温度信息
//     * @return 如果有信息则返回信息 没有返回空值
//     */
//    public String getWeatherMinTmp(){
//        // 判断hashmap里是否有这个时间的信息
//        if (weatherInfo.containsKey(Constants.weatherType.minTmp)){
//            // 如果有 获取对应的信息
//            return weatherInfo.get(Constants.weatherType.minTmp).toString();
//        }
//        return null;
//    }
}
